home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 August: Tool Chest / Dev.CD Aug 00 TC Disk 2.toast / pc / sample code / quicktime / quicktime for java / dsapplet.win / src / ds / actions / skewer.java < prev   
Encoding:
Java Source  |  2000-06-23  |  3.2 KB  |  92 lines

  1. /*
  2.  * quicktime.app: Sample Code for Initial Seeding
  3.  *
  4.  * © 1997 Copyright, Apple Computer
  5.  * All rights reserved
  6.  */
  7. package ds.actions;
  8.  
  9. import quicktime.app.actions.*;
  10. import quicktime.qd.*;
  11. import quicktime.*;
  12. import quicktime.std.image.Matrix;
  13. import quicktime.app.image.Transformable;
  14. import quicktime.app.display.Drawable;
  15.  
  16. import java.awt.Dimension;
  17. import java.awt.event.MouseEvent;
  18.  
  19. /**
  20.  * A class that provides the implementation of where a dragged object will be skewed
  21.  * The amount of skew is determined by the distance between the original mouse click and the 
  22.  * current mouse-moved location divided by the specified skewFactors.
  23.  */
  24. public class Skewer extends Dragger {
  25. //____________________________ CLASS METHODS
  26.     /**
  27.      * Set some parameters that will create DragActions. 
  28.      * @param modifierKeyMask - if specified will determine which modifier keys must
  29.      * be depressed for the action to be invoked.
  30.      */
  31.     public Skewer (int xSkewFactor, int ySkewFactor, int modifierKeyMask) {
  32.         this (xSkewFactor, ySkewFactor, modifierKeyMask, MouseResponder.kModifiersExactMatch, MouseResponder.kClickEvents);
  33.     }
  34.  
  35.     /**
  36.      * Set some parameters that will create DragActions. 
  37.      * @param modifierKeyMask - if specified will determine which modifier keys must
  38.      * be depressed for the action to be invoked.
  39.      * @param modifierTestConditions the test conditions under which the modifier mask is tested
  40.      */
  41.     public Skewer (int xSkewFactor, int ySkewFactor, int modifierKeyMask, int modifierTestConditions, int eventInvoker) {
  42.         super (modifierKeyMask, modifierTestConditions, eventInvoker);
  43.         xSkew = xSkewFactor;
  44.         ySkew = ySkewFactor;
  45.     }    
  46.     
  47. //____________________________ INSTANCE VARIABLES
  48.     private int xOrigin, yOrigin;    
  49.     private int xSkew, ySkew;
  50.     private Matrix originalMat;
  51.  
  52. //____________________________ INSTANCE METHODS
  53.     /**
  54.      * This method is used by the DragController when the mouse is first pressed down on 
  55.      * the draggable object. If you wish to do anything to your draggable object before it
  56.      * is dragged then you should overide this method. The default implementation does nothing.
  57.      * @param event the mouse down event that may begin the drag action
  58.      */
  59.     public void mousePressed (MouseEvent event) {
  60.         try {
  61.             xOrigin = event.getX();
  62.             yOrigin = event.getY();
  63.             originalMat = target.getMatrix();
  64.         } catch (QTException e) {
  65.             throw new QTRuntimeException (e);
  66.         }
  67.     }
  68.  
  69.     /**
  70.      * This method is called by Dragger when an event is received that meets the conditions for 
  71.      * the object to be dragged.
  72.      * <P>
  73.      * This method will allow the user to skew the object by dragging on it.
  74.      * @param event the mouse drag event that triggered the drag action.
  75.      * @param space The drawable object is the space within which the event has occured.
  76.      */
  77.     public void mouseDragged (MouseEvent event) {
  78.         try {
  79.             // protect against a zero divide
  80.             float skewX = (xSkew != 0 ? (event.getX() - xOrigin) / (float)xSkew : 0);
  81.             float skewY = (ySkew != 0 ? (event.getY() - yOrigin) / (float)ySkew : 0);
  82.             Matrix mat = (Matrix)originalMat.clone();
  83.             
  84.             mat.skew (skewX, skewY, mat.getTx(), mat.getTy());
  85.                     
  86.             target.setMatrix (mat);
  87.         } catch (QTException e) {
  88.             throw new QTRuntimeException (e);
  89.         }
  90.     }
  91. }
  92.